現在來測試一下我們寫出來的網頁~
發現註冊之後只會看到"success"的訊息
於是我們要修改程式碼
讓使用者在註冊之後可以被引導到welcome
頁面
新增以下在controller/user.php
的register()內:
$this->welcome();
記得是在註冊之後唷~
這樣就可以成功重新導向歡迎頁面了
咦?
瀏覽器報錯了
是甚麼問題呢?
哦原來是因為前幾天,我們有設定session暫存username
,而註冊完並沒有存session,所以瀏覽器讀不到username
了解bug產生的原因後,隨即前往修復
一樣到controller/user.php
的register()新增一行:
$this->session->set_userdata($sess_data = array('username' => $data['username']));
測試一下:
先隨便找個帳號註冊
測試成功~
其實也不太算
透過剛剛的註冊測試會發現
之前我們的register主要獲取view傳來的使用者資料是在model中
這不太符合我們的MVC分工開發模式
所以我們把這件事拉回controller中執行。controller/user.php
中的register():
$data = array(
'username' => $this->input->post('username'),
'password' => $this->input->post('password'),
'name' => $this->input->post('name'),
'gender' => $this->input->post('gender'),
'about' => $this->input->post('about'),
);
$this->user_model->register($data);
等我們的controller拿到data之後,再傳給model
而model/user_model.php
中的register():
public function register($data)
{
$this->db->insert('user', $data);
}
如果剛剛註冊測試時,就算用了之前已經註冊的帳號(test之類的)
我們的網頁還是會讓你註冊通過,而導致database中
username叫test的有好幾個
為了避免這個使用者名稱重複的情況發生
我們在controller多一些判斷
username
給Model做搜尋username
的data。如果有就報錯給使用者並讓使用者重新註冊首先,我們再user_model.php
新增一個函式回傳相同username的資料個數:
public function checkreg($data)
{
return $this->db->where('username',$data['username'])
->get('user')
->num_rows();
}
接著到controller/user.php
底下修改register():
public function register()
{
$data = array(
'username' => $this->input->post('username'),
'password' => $this->input->post('password'),
'name' => $this->input->post('name'),
'gender' => $this->input->post('gender'),
'about' => $this->input->post('about'),
);
$check = $this->user_model->checkreg($data);
if($check == 0){
$this->user_model->register($data);
$this->session->set_userdata($sess_data = array('username' => $data['username']));
$this->welcome();
}
else{
echo "使用者名稱已被註冊";
echo "<button><a href=".base_url()."index.php/register style='text-decoration:none; color:black'>返回</button>";
}
}
然後把welcome.php
的login success改成:
<h1>Welcome <?php echo $_SESSION['username'] ?></h1>
大功告成~~
接著來測試看看吧~
我們利用剛剛註冊的tttt來試試看~
這樣就成功預防相同username註冊帳號的情況囉~~